package br.edu.fucapi.remo.model.dao;

import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import br.edu.fucapi.remo.model.bean.Lancamento;
import br.edu.fucapi.remo.model.bean.Usuario;


public class UsuarioDAO {
	
	DAO<Lancamento> dao;
	
	@Inject
	private EntityManager em;
	public boolean existe(Usuario usuario) {
		boolean resultado = false;
		Query query = em.createQuery(
				"from Usuario u " +
				"where u.login = :pLogin " +
				"   and u.senha = :pSenha");
		query.setParameter("pLogin", usuario.getLogin());
		query.setParameter("pSenha", usuario.getSenha());
		resultado = !query.getResultList().isEmpty();
		return resultado;
	}
	
	public EntityManager getEntityManager() {
	    EntityManagerFactory factory = Persistence.createEntityManagerFactory("remo");
	    EntityManager entityManager = factory.createEntityManager();
	    factory.close();

	    return entityManager;
	  }

	public UsuarioDAO(EntityManager em) {
		this.em = em;
	}
	
	public UsuarioDAO() {
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> pesquisar(Usuario usuario) {

		String hql = "from Usuario usuario";
		String conector = "";

		if (usuario != null) {
			if (usuario.getAssociado().getNome() != null && !usuario.getAssociado().getNome().isEmpty()) {
				if (conector.isEmpty()) {
					conector = " where ";
				} else {
					conector = " and ";
				}
				hql = hql + conector + " upper(usuario.associado.nome) like :pNome ";
			}
			
		}
		
		hql = hql + " ORDER BY associado.nome ASC";

		Query query = getEntityManager().createQuery(hql);

		if (usuario != null) {
			if (usuario.getAssociado().getNome() != null && !usuario.getAssociado().getNome().isEmpty()) {
				query.setParameter("pNome", "%" + usuario.getAssociado().getNome().toUpperCase() + "%");
			}
			
		}

		List<Usuario> lista = query.getResultList();

		return lista;
	}

}